import com.fasterxml.jackson.databind.ObjectMapper;
import login.Student;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;


// body 按照 json 的格式来组织数据
// 利用 postman 来构造 body中的数据（可以指定 json 格式），发送请求，
// 服务器使用 getInputStream() 来读取 body 中的值
@WebServlet("/postParameter2")
public class PostParameter2Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //super.doPost(req, resp);

//        通过这个方法来处理 body 为 json 格式的数据
//        直接把 req 对象里的数据全部读取出来  getInputStream
//        在流对象中读取多少字节？ 取决于 content-length
//        int length = req.getContentLength();
        // 创建一个数组
//        byte[] buffer = new byte[length];

        //返回结果是 InputStream 对象，所以用一个 InputStream 对象来接收
        InputStream inputStream = req.getInputStream();
        // 把读取到的数据写到数组中
//        inputStream.read(buffer);

        // 把字节数组变成字符串
        // 0 表示从哪开始，后一个参数 length 表示到哪结束
//        String body = new String(buffer,0,length);
//        System.out.println("body: " + body);

//        resp.getWriter().write(body);


        // 类对象是 类的 图纸 (上面都有类的什么属性)，
        // 显式地告诉readValue进行解析的时候要按照哪个类为目标进行解析
        // 1. 把json 格式字符串解析
        // 2. 把里面的键值对整理成 Map
        // 3. 遍历 map 看 key和 java中的这个属性对应的，名字对应就把值赋过去

        // 使用 jackson 涉及到的核心对象.
        ObjectMapper objectMapper = new ObjectMapper();
        // readValue 就是把一个 json 格式的字符串转成 Java 对象.
        Student student = objectMapper.readValue(req.getInputStream(), Student.class);
        System.out.println(student.getStudentId() + ", " + student.getClasstId());

    }
}
